package busterminal.persistence.memory;

import busterminal.entity.Trip;
import busterminal.persistence.TripDAO;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Реализация интерфейса Data Access Object для рейса для работы с коллекцией
 */
class MemoryTripDAO extends AbstractMemoryDAO<Trip> implements TripDAO {

    /**
     * Коллекция, содержащая все остановочные пункты
     */
    private static Map<Integer, Trip> dataSource = new HashMap<Integer, Trip>();
    /**
     * Идентификатор пункта расписания
     */
    private static Integer counter = 1;

    /**
     * Конструктор по умолчанию
     */
    public MemoryTripDAO() {
    }

    /**
     * Получить коллекцию, содержащую все остановочные пункты
     * @return коллекция
     */
    @Override
    protected Map<Integer, Trip> getDataSource() {
        return dataSource;
    }

    /**
     * Получить идентификатор остановочного пункта и увеличить его на единицу
     * @return идентификатор
     */
    @Override
    protected Integer getAndIncreaseCounter() {
        return counter++;
    }

    /**
     * Найти рейсы, осуществляемые в указанную дату
     * @param date дата
     * @return список осуществляемых рейсов
     */
    @Override
    public List<Trip> findByDate(Date date) {
        List<Trip> list = new ArrayList<Trip>();
        for (Trip trip : dataSource.values()) {
            if (trip.getTripDate().getTime() == date.getTime()) {
                if (!list.contains(trip)) {
                    list.add(trip);
                }
            }
        }
        return list;
    }
}
